﻿Public Class MultiCuentaContable

#Region "Roberto"

    ''' <summary>
    ''' Agrega una cuenta contable.
    ''' </summary>
    ''' <param name="p_codigo">Codigo.</param>
    ''' <param name="p_descripcion">Descripcion.</param>
    ''' <remarks>Creado Por: Roberto Fiatt, Fecha: 13/06/2010 Modificado: 27/06/2010</remarks>
    Public Shared Sub agregar(ByVal p_codigo As String, ByVal p_descripcion As String)

        Dim pars(3) As AccesoDatos.Parametro
        Dim sql As String

        sql = "INSERT INTO t_cuenta_contable VALUES (codigo_cuenta, descripcion, saldo, eliminado)"
        pars(0) = New AccesoDatos.Parametro("codigo_cuenta", p_codigo)
        pars(1) = New AccesoDatos.Parametro("descripcion", p_descripcion)
        pars(2) = New AccesoDatos.Parametro("saldo", 0)
        pars(3) = New AccesoDatos.Parametro("eliminado", 0)


        g_access.ejecutarSQL(sql, pars)

    End Sub

    ''' <summary>
    ''' Consulta las cuentas contables por codigo.
    ''' </summary>
    ''' <param name="p_codigo">Codigo de la cuenta.</param>
    ''' <returns>CuentaContable.</returns>
    ''' <remarks>Creado Por: Roberto Fiatt, Fecha: 13/06/2010 Modificado: 27/06/2010</remarks>
    Public Shared Function consultar(ByVal p_codigo As String) As List(Of CuentaContable)

        Dim dr As IDataReader
        Dim pars(0) As AccesoDatos.Parametro
        Dim listaCuentas As New List(Of CuentaContable)
        Dim sql As String

        sql = "SELECT * FROM t_cuenta_contable WHERE codigo_cuenta LIKE p_codigo AND eliminado = 0"
        pars(0) = New AccesoDatos.Parametro("p_codigo", "%" & p_codigo & "%")

        dr = g_access.ejecutarQuery(sql, pars)

        While dr.Read()
            listaCuentas.Add(instanciarCuentaContable(dr))
        End While

        Return listaCuentas
    End Function

    ''' <summary>
    ''' Modifica una cuenta contable.
    ''' </summary>
    ''' <param name="p_codigo">Codigo.</param>
    ''' <param name="p_descripcion">Descripcion.</param>
    ''' <param name="p_saldo">Saldo.</param>
    ''' <remarks>Creado Por: Roberto Fiatt, Fecha: 13/06/2010 Modificado: 27/06/2010</remarks>
    Public Shared Sub modificar(ByVal p_codigo As String, ByVal p_descripcion As String, ByVal p_saldo As Double)

        Dim pars(2) As AccesoDatos.Parametro
        Dim sql As String

        sql = "UPDATE t_cuenta_contable SET descripcion = p_descripcion, " _
                            & "saldo = p_saldo WHERE codigo_cuenta = p_codigo"

        pars(0) = New AccesoDatos.Parametro("p_codigo", p_codigo)
        pars(1) = New AccesoDatos.Parametro("p_descripcion", p_descripcion)
        pars(2) = New AccesoDatos.Parametro("p_saldo", p_saldo)


        g_access.ejecutarSQL(sql, pars)

    End Sub

    ''' <summary>
    ''' Elimina una cuenta contable
    ''' </summary>
    ''' <param name="p_codigo">Codigo.</param>
    ''' <remarks>Creado Por: Roberto Fiatt, Fecha: 13/06/2010 Modificado: 27/06/2010</remarks>
    Public Shared Sub eliminar(ByVal p_codigo As String)

        Dim pars(0) As AccesoDatos.Parametro
        Dim sql As String

        sql = "UPDATE t_cuenta_contable SET eliminado = 1 WHERE codigo_cuenta = p_codigo"

        pars(0) = New AccesoDatos.Parametro("p_codigo", p_codigo)

        Try
            g_access.ejecutarSQL(sql, pars)
        Catch ex As Exception
            Throw ex
        End Try

    End Sub

    ''' <summary>
    ''' Instancia una CuentaContable.
    ''' </summary>
    ''' <param name="p_dr">Data Reader con los datos de la cuenta.</param>
    ''' <returns>CuentaContable</returns>
    ''' <remarks>Creado Por: Roberto Fiatt, Fecha: 13/06/2010 Modificado: 18/06/2010</remarks>
    Private Shared Function instanciarCuentaContable(ByVal p_dr As IDataReader) As CuentaContable

        Dim codigo As String = CStr(p_dr.Item("codigo_cuenta"))
        Dim descripcion As String = CStr(p_dr.Item("descripcion"))
        Dim saldo As Double = CDbl(p_dr.Item("saldo"))

        Dim objCuentaContable = New CuentaContable(codigo, descripcion, saldo)


        Return objCuentaContable
    End Function
#End Region

#Region "Stephan"

    ''' <summary>
    ''' Realiza la busqueda de una cuenta contable especifica
    ''' </summary>
    ''' <param name="p_codigo">codigo de la cuenta contable</param>
    ''' <returns>Una cuenta contable</returns>
    ''' <remarks>Creador por: Stephan Endres, Fecha: 21/06/2010, Modificado: 21/06/2010.</remarks>
    Public Shared Function buscar(ByVal p_codigo As String) As CuentaContable
        Dim dr As IDataReader
        Dim pars(0) As AccesoDatos.Parametro
        Dim objCuentaContable As CuentaContable = Nothing
        Dim sql As String

        sql = "SELECT * FROM t_cuenta_contable WHERE codigo_cuenta LIKE p_codigo AND eliminado = 0"
        pars(0) = New AccesoDatos.Parametro("p_codigo", p_codigo)

        dr = g_access.ejecutarQuery(sql, pars)

        While dr.Read()
            objCuentaContable = instanciarCuentaContable(dr)
        End While

        Return objCuentaContable
    End Function

#End Region

End Class
